In a shared database system, multiple nodes or members modify shared resources, and each node writes logs recording the operations local to the node. These logs can then be used in a recovery operation in the event of a crash of the shared database system. During a recovery operation, the operations recorded in the logs are applied against objects in the last image of the database stored prior to the crash. In order to return the database back to the condition just prior to the crash, these operations must be applied in the order in which they originally occurred. For example, a delete a row operation must be applied after the operation which inserted the row. One approach for ensuring proper ordering utilizes hardware support for a synchronized global clock which puts a global timestamp on every log record. A synchronized global clock requires specialized hardware such as a sysplex timer found on certain mainframe systems. Another approach is a Lamport clock algorithm, where a virtual timestamp (VTS) is exchanged between nodes when nodes naturally communicate with each other.
A shared disk database system using common hardware lacks a sysplex timer, and thus a synchronized global clock approach is not possible. Further, although the Lamport clock algorithm works well for database objects that are shared between nodes, the Lamport clock algorithm does not work well for logically dependent operations that do not share a database object. Thus, both approaches are inadequate for a share database system.